// import lumos.CPU
// object Elaborate extends App {
//   val firtoolOptions = Array(
//     "--lowering-options=" + List(
//       // make yosys happy
//       // see https://github.com/llvm/circt/blob/main/docs/VerilogGeneration.md
//       "disallowLocalVariables",
//       "disallowPackedArrays",
//       "locationInfoStyle=wrapInAtSquareBracket"
//     ).reduce(_ + "," + _)
//   )
//   circt.stage.ChiselStage.emitSystemVerilogFile(new CPU(), args, firtoolOptions)
// }
import chisel3._
import chisel3.util._

class MuxLookupExample extends Module {
  val io = IO(new Bundle {
    val sel = Input(UInt(2.W))  // 输入信号宽度为 2
    val out = Output(UInt(4.W)) // 输出信号宽度为 4
  })

  // 构造一个简单的查找表
  val lookupTable = Seq(
    0.U -> 1.U(4.W), // 如果 sel 是 0，输出为 1
    1.U -> 2.U(4.W), // 如果 sel 是 1，输出为 2
    2.U -> 4.U(4.W), // 如果 sel 是 2，输出为 4
    3.U -> 8.U(4.W)  // 如果 sel 是 3，输出为 8
  )

  // 使用 MuxLookup
  io.out := MuxLookup(io.sel, 0.U(4.W), lookupTable)
}

object MuxLookupExample extends App {
  // 生成 Verilog
  println(getVerilogString(new MuxLookupExample))
}

